package com.no.hq.controller.file;

import com.no.hq.util.StringUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;

@Controller
@Slf4j
@RequestMapping("/file")
public class FileController {

    @RequestMapping("upload")
    public String upload(@RequestParam("myFile") MultipartFile file, Model model) {
        if(file.isEmpty())
            throw new RuntimeException("没有指定上传文件");
        // 先获得上传文件的原始名称
        String filename = file.getOriginalFilename();
        log.debug("获取到原始文件名，fileName -> " + filename);
        // 拿到文件后缀
        String suffixName = StringUtil.getSuffixName(filename);
        // 生成32位的字符序列作为保存后的文件名
        String newFileName = StringUtil.randomName();
        // 指定上传文件的保存路径
        String filePath = "D://tmp//";
        // 拼接文件上传后的全名
        String fullFileName = filePath + newFileName + suffixName;
        log.debug("文件上传后的全称是： fullFileName -> " + fullFileName);
        // 确定保存文件的路径，确实存在，如不存在，创建改路径
        File dest = new File(fullFileName);
        if(!dest.getParentFile().exists())
            dest.getParentFile().mkdirs();
        // 文件上传
        try {
            file.transferTo(dest);
            model.addAttribute("myFileName", "/tmp/" + newFileName + suffixName);
            return "file/succ";
        } catch (IOException e) {
            e.printStackTrace();
            throw new RuntimeException("文件上传失败，请检查后台代码！");
        }
    }
}
